"""
pool.starmap
"""
import time
from multiprocessing import Pool


def run(fn, min=0, max=5):
    if min < fn < max:
        time.sleep(1)
        return fn * fn


if __name__ == "__main__":
    testFL = [1, 2, 3, 4, 5, 6]
    """
    Pool.starmap()也只仅接受一个迭代器参数，但在starmap()中，迭代器中的每一个元件也是一个迭代器。你可以通过这个内部迭代器向被并行化处理的函数传递参数，在执行时再顺序解开，只要传递和解开的顺序一致就行
    实际上，Pool.starmap()就像是一个接受参数的Pool.map()版本
    
    """
    with Pool(3) as p:
        result = p.starmap(run, [(i, 1, 6) for i in testFL])  # starmap的第二个参数
        p.close()  # 关闭进程池，不再接受新的进程
        p.join()  # 主进程阻塞等待子进程的退出

    print(result)